package com.wf.demo.job.service;

import com.wf.demo.info.pojo.Device;
import com.wf.demo.info.util.LocalDateTimeUtils;
import com.wf.demo.info.util.ParseUtil;
import com.wf.demo.job.dao.TimeOfDeviceDAO;
import com.wf.demo.job.pojo.DataDevice;
import com.wf.demo.job.pojo.TimeOfDevice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * @Auther: wf
 * @Date: 2019/12/11 21:32
 * @Description:
 */
@Service
public class TimeOfDeviceService {
    @Autowired
    TimeOfDeviceDAO timeOfDeviceDAO;
    //增删改查
    public void add(TimeOfDevice bean){
    timeOfDeviceDAO.save(bean);
    }
    public void update(TimeOfDevice bean){
        timeOfDeviceDAO.save(bean);
    }
    public void delete(int id){
        timeOfDeviceDAO.delete(id);
    }
    public TimeOfDevice get(int id){
        return timeOfDeviceDAO.findOne(id);
    }
    /**
     *功能描述  得到设备已经存在的这个月的在线时间记录
     * @author wf
     * @date 2019/12/12
     * @param device
     * @return com.wf.demo.job.pojo.TimeOfDevice
     */
    public  TimeOfDevice getOneOfMonth(Device device){
        Sort sort = new Sort(Sort.Direction.DESC, "id");  //id倒序排序，最新的记录在最前面
        Pageable pageable = new PageRequest(0, 1, sort);
        Page<TimeOfDevice> page= timeOfDeviceDAO.findByDevice(device,pageable);
        List<TimeOfDevice> timeOfDevices=page.getContent();
        return timeOfDevices.get(0);
    }
    /**
     *功能描述    查找得到设备每个月的在线率（使用率）默认得到最近12个月的数据
     * @author wf
     * @date 2019/12/12
     * @param device
     * @return java.lang.Object
     */
    public Object  statisticlMonthofOnlineRate(Device device){
        Map<String,Float> map= new LinkedHashMap<>();
        String format="yyyy-MM-dd";
        Sort sort = new Sort(Sort.Direction.DESC, "id");  //id倒序排序，最新的记录在最前面
        Pageable pageable = new PageRequest(0, 12, sort); //得到12个 即最近一年的变化情况
        Page<TimeOfDevice> page= timeOfDeviceDAO.findByDevice(device,pageable);

        //得到设备所有的每个月在线时间
        List<TimeOfDevice> timeOfDevices=page.getContent();
        for(TimeOfDevice timeOfDevice:timeOfDevices){
            //为当月
            if (LocalDateTimeUtils.isNowMonth(timeOfDevice.getCreatTime())){
                //取出日期并转成String
                String dateMonth =timeOfDevice.getCreatTime().format(DateTimeFormatter.ofPattern(format));
                //取出在线时长并计算这个月的在线率
                //本月开始到现在的时间
                Long startToNowOfMonth= LocalDateTimeUtils.getMillSecondByLocalDateTime(LocalDateTime.now())-
                        LocalDateTimeUtils.getLongBeginOfMonth();
                float onlineRate=(float) timeOfDevice.getOnlineTimeOfMonth()/startToNowOfMonth;
                Float result= ParseUtil.floatSave2Decimal(onlineRate);
                map.put(dateMonth,result);
            }//非当月
            else {
                //取出日期并转成String
                String dateMonth =timeOfDevice.getCreatTime().format(DateTimeFormatter.ofPattern(format));
                //取出在线时长并计算这个月的在线率
                //得到过去某月的那一个月的总时间毫秒数
                Long startToNowOfMonth= LocalDateTimeUtils. getIntervalOfMonth(timeOfDevice.getCreatTime());
                float onlineRate=(float) timeOfDevice.getOnlineTimeOfMonth()/startToNowOfMonth;
                Float result= ParseUtil.floatSave2Decimal(onlineRate);
                map.put(dateMonth,result);
            }
        }
        return  map;
    }
}
